From fa13277655e14d2ecc291f8083580058456c2dad Mon Sep 17 00:00:00 2001 From: Johan Dahlin Date: Wed, 24 Oct 2007 11:48:17 +0000 Subject: [PATCH] Parse signals after tags and add tests. (#468793, Benjamin Otte) 2007-10-24 Johan Dahlin * gtk/gtkbuilder.c: (_gtk_builder_construct), (_gtk_builder_add_signals): * gtk/gtkbuilderparser.c: (end_element): * gtk/gtkbuilderprivate.h: * tests/buildertest.c: (test_connect_signals): Parse signals after tags and add tests. (#468793, Benjamin Otte) svn path=/trunk/; revision=18944 --- ChangeLog | 11 +++++++++++ gtk/gtkbuilder.c | 10 ++++++++-- gtk/gtkbuilderparser.c | 2 ++ gtk/gtkbuilderprivate.h | 2 ++ tests/buildertest.c | 22 ++++++++++++++++++++++ 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6ed403f7ce..d73a15a747 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2007-10-24 Johan Dahlin + + * gtk/gtkbuilder.c: (_gtk_builder_construct), + (_gtk_builder_add_signals): + * gtk/gtkbuilderparser.c: (end_element): + * gtk/gtkbuilderprivate.h: + * tests/buildertest.c: (test_connect_signals): + + Parse signals after tags and add tests. + (#468793, Benjamin Otte) + 2007-10-24 Johan Dahlin * gtk/gtkbuilderparser.c (end_element): Allow empty property nodes diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c index 5f4566dbe5..1ab9acbca0 100644 --- a/gtk/gtkbuilder.c +++ b/gtk/gtkbuilder.c @@ -497,8 +497,6 @@ _gtk_builder_construct (GtkBuilder *builder, } g_hash_table_insert (builder->priv->objects, g_strdup (info->id), obj); - builder->priv->signals = g_slist_concat (builder->priv->signals, - g_slist_copy (info->signals)); return obj; } @@ -545,6 +543,14 @@ _gtk_builder_add (GtkBuilder *builder, child_info->added = TRUE; } +void +_gtk_builder_add_signals (GtkBuilder *builder, + GSList *signals) +{ + builder->priv->signals = g_slist_concat (builder->priv->signals, + g_slist_copy (signals)); +} + static void apply_delayed_properties (const gchar *window_name, GSList *props, diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c index af3a826fd4..3ca1d3c31d 100644 --- a/gtk/gtkbuilderparser.c +++ b/gtk/gtkbuilderparser.c @@ -774,6 +774,8 @@ end_element (GMarkupParseContext *context, if (GTK_IS_BUILDABLE (object_info->object) && GTK_BUILDABLE_GET_IFACE (object_info->object)->parser_finished) data->finalizers = g_slist_prepend (data->finalizers, object_info->object); + _gtk_builder_add_signals (data->builder, object_info->signals); + free_object_info (object_info); } else if (strcmp (element_name, "property") == 0) diff --git a/gtk/gtkbuilderprivate.h b/gtk/gtkbuilderprivate.h index 1c3f18e68a..8277fa792b 100644 --- a/gtk/gtkbuilderprivate.h +++ b/gtk/gtkbuilderprivate.h @@ -105,6 +105,8 @@ GObject * _gtk_builder_construct (GtkBuilder *builder, ObjectInfo *info); void _gtk_builder_add (GtkBuilder *builder, ChildInfo *child_info); +void _gtk_builder_add_signals (GtkBuilder *builder, + GSList *signals); void _gtk_builder_finish (GtkBuilder *builder); void _free_signal_info (SignalInfo *info, gpointer user_data); diff --git a/tests/buildertest.c b/tests/buildertest.c index 72b25e0337..079e12d281 100644 --- a/tests/buildertest.c +++ b/tests/buildertest.c @@ -189,6 +189,15 @@ gboolean test_connect_signals (void) " " " " ""; + const gchar buffer_after_child[] = + "" + " " + " " + " " + " " + " " + " " + ""; builder = builder_new_from_string (buffer, -1, NULL); gtk_builder_connect_signals (builder, NULL); @@ -229,6 +238,19 @@ gboolean test_connect_signals (void) g_object_unref (builder); + /* new test, reset globals */ + after = 0; + normal = 0; + + builder = builder_new_from_string (buffer_after_child, -1, NULL); + window = gtk_builder_get_object (builder, "window1"); + gtk_builder_connect_signals (builder, NULL); + gtk_window_set_title (GTK_WINDOW (window), "test"); + + g_return_val_if_fail (normal == 1, FALSE); + gtk_widget_destroy (GTK_WIDGET (window)); + g_object_unref (builder); + return TRUE; } -- 2.30.2